1 module hip.windowing.platforms.x11lib.glx; 2 import hip.windowing.platforms.x11lib.x11; 3 4 version(Android){} 5 else version(linux) 6 version = X11; 7 8 version(X11): 9 10 alias GLint = int; 11 alias GLubyte = ubyte; 12 alias GLXPixmap = XID; 13 alias GLXDrawable = XID; 14 /* GLX 1.3 and later */ 15 struct __GLXcontextRec; 16 alias GLXContext = __GLXcontextRec*; 17 struct __GLXFBConfigRec; 18 alias GLXFBConfig = __GLXFBConfigRec*; 19 alias GLXFBConfigID = XID; 20 alias GLXContextID = XID; 21 alias GLXWindow = XID; 22 alias GLXPbuffer = XID; 23 24 25 enum GLX_USE_GL = 1; 26 enum GLX_BUFFER_SIZE = 2; 27 enum GLX_LEVEL = 3; 28 enum GLX_RGBA = 4; 29 enum GLX_DOUBLEBUFFER = 5; 30 enum GLX_STEREO = 6; 31 enum GLX_AUX_BUFFERS = 7; 32 enum GLX_RED_SIZE = 8; 33 enum GLX_GREEN_SIZE = 9; 34 enum GLX_BLUE_SIZE = 10; 35 enum GLX_ALPHA_SIZE = 11; 36 enum GLX_DEPTH_SIZE = 12; 37 enum GLX_STENCIL_SIZE = 13; 38 enum GLX_ACCUM_RED_SIZE = 14; 39 enum GLX_ACCUM_GREEN_SIZE = 15; 40 enum GLX_ACCUM_BLUE_SIZE = 16; 41 enum GLX_ACCUM_ALPHA_SIZE = 17; 42 43 enum GLX_SAMPLE_BUFFERS = 0x186a0; /*100000*/ 44 enum GLX_SAMPLES = 0x186a1; /*100001*/ 45 46 47 /* 48 * GLX 1.3 and later: 49 */ 50 enum GLX_CONFIG_CAVEAT = 0x20; 51 enum GLX_DONT_CARE = 0xFFFFFFFF; 52 enum GLX_X_VISUAL_TYPE = 0x22; 53 enum GLX_TRANSPARENT_TYPE = 0x23; 54 enum GLX_TRANSPARENT_INDEX_VALUE = 0x24; 55 enum GLX_TRANSPARENT_RED_VALUE = 0x25; 56 enum GLX_TRANSPARENT_GREEN_VALUE = 0x26; 57 enum GLX_TRANSPARENT_BLUE_VALUE = 0x27; 58 enum GLX_TRANSPARENT_ALPHA_VALUE = 0x28; 59 enum GLX_WINDOW_BIT = 0x00000001; 60 enum GLX_PIXMAP_BIT = 0x00000002; 61 enum GLX_PBUFFER_BIT = 0x00000004; 62 enum GLX_AUX_BUFFERS_BIT = 0x00000010; 63 enum GLX_FRONT_LEFT_BUFFER_BIT = 0x00000001; 64 enum GLX_FRONT_RIGHT_BUFFER_BIT = 0x00000002; 65 enum GLX_BACK_LEFT_BUFFER_BIT = 0x00000004; 66 enum GLX_BACK_RIGHT_BUFFER_BIT = 0x00000008; 67 enum GLX_DEPTH_BUFFER_BIT = 0x00000020; 68 enum GLX_STENCIL_BUFFER_BIT = 0x00000040; 69 enum GLX_ACCUM_BUFFER_BIT = 0x00000080; 70 enum GLX_NONE = 0x8000; 71 enum GLX_SLOW_CONFIG = 0x8001; 72 enum GLX_TRUE_COLOR = 0x8002; 73 enum GLX_DIRECT_COLOR = 0x8003; 74 enum GLX_PSEUDO_COLOR = 0x8004; 75 enum GLX_STATIC_COLOR = 0x8005; 76 enum GLX_GRAY_SCALE = 0x8006; 77 enum GLX_STATIC_GRAY = 0x8007; 78 enum GLX_TRANSPARENT_RGB = 0x8008; 79 enum GLX_TRANSPARENT_INDEX = 0x8009; 80 enum GLX_VISUAL_ID = 0x800B; 81 enum GLX_SCREEN = 0x800C; 82 enum GLX_NON_CONFORMANT_CONFIG = 0x800D; 83 enum GLX_DRAWABLE_TYPE = 0x8010; 84 enum GLX_RENDER_TYPE = 0x8011; 85 enum GLX_X_RENDERABLE = 0x8012; 86 enum GLX_FBCONFIG_ID = 0x8013; 87 enum GLX_RGBA_TYPE = 0x8014; 88 enum GLX_COLOR_INDEX_TYPE = 0x8015; 89 enum GLX_MAX_PBUFFER_WIDTH = 0x8016; 90 enum GLX_MAX_PBUFFER_HEIGHT = 0x8017; 91 enum GLX_MAX_PBUFFER_PIXELS = 0x8018; 92 enum GLX_PRESERVED_CONTENTS = 0x801B; 93 enum GLX_LARGEST_PBUFFER = 0x801C; 94 enum GLX_WIDTH = 0x801D; 95 enum GLX_HEIGHT = 0x801E; 96 enum GLX_EVENT_MASK = 0x801F; 97 enum GLX_DAMAGED = 0x8020; 98 enum GLX_SAVED = 0x8021; 99 enum GLX_WINDOW = 0x8022; 100 enum GLX_PBUFFER = 0x8023; 101 enum GLX_PBUFFER_HEIGHT = 0x8040; 102 enum GLX_PBUFFER_WIDTH = 0x8041; 103 enum GLX_RGBA_BIT = 0x00000001; 104 enum GLX_COLOR_INDEX_BIT = 0x00000002; 105 enum GLX_PBUFFER_CLOBBER_MASK = 0x08000000; 106 107 108 enum GLX_CONTEXT_MAJOR_VERSION_ARB = 0x2091; 109 enum GLX_CONTEXT_MINOR_VERSION_ARB = 0x2092; 110 enum GLX_CONTEXT_FLAGS_ARB = 0x2094; 111 enum GLX_CONTEXT_PROFILE_MASK_ARB = 0x9126; 112 113 enum GLX_CONTEXT_DEBUG_BIT_ARB = 0x0001; 114 enum GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB = 0x000; 115 enum GLX_CONTEXT_CORE_PROFILE_BIT_ARB = 0x00000001; 116 enum GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB = 0x00000002; 117 118 alias glXCreateContextAttribsARBProc = extern(C) nothrow @nogc GLXContext function(Display*, GLXFBConfig, GLXContext, Bool, const(int)*); 119 alias glXSwapIntervalEXTProc = extern(C) nothrow @nogc void function(Display *dpy, GLXDrawable drawable, int interval); 120 alias glXSwapIntervalSGIProc = extern(C) nothrow @nogc int function(int interval); 121 alias glXSwapIntervalMESAProc = extern(C) nothrow @nogc int function(int interval); 122 123 glXSwapIntervalEXTProc glXSwapIntervalEXT; 124 glXSwapIntervalMESAProc glXSwapIntervalMESA; 125 glXSwapIntervalSGIProc glXSwapIntervalSGI; 126 127 ///https://www.khronos.org/opengl/wiki/Tutorial:_OpenGL_3.0_Context_Creation_(GLX) 128 nothrow @system @nogc 129 bool isExtensionSupported(const char *extList, const char *extension) 130 { 131 import core.stdc.string; 132 const(char)* start; 133 const(char)* where, terminator; 134 135 /* Extension names should not have spaces. */ 136 where = strchr(extension, ' '); 137 if (where || *extension == '\0') 138 return false; 139 140 /* It takes a bit of care to be fool-proof about parsing the 141 OpenGL extensions string. Don't be fooled by sub-strings, 142 etc. */ 143 for (start=extList;;) 144 { 145 where = strstr(start, extension); 146 147 if (!where) 148 break; 149 150 terminator = where + strlen(extension); 151 152 if ( where == start || *(where - 1) == ' ' ) 153 if ( *terminator == ' ' || *terminator == '\0' ) 154 return true; 155 156 start = terminator; 157 } 158 159 return false; 160 }